/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package edu.cmu.mism.dgjava.data.models.option.impl;

import edu.cmu.mism.dgjava.data.models.option.AmericanType;
import edu.cmu.mism.dgjava.data.models.option.BaseType;
import edu.cmu.mism.dgjava.data.models.option.BinomialAmerican;
import edu.cmu.mism.dgjava.data.models.option.BinomialEuropean;
import edu.cmu.mism.dgjava.data.models.option.BlackScholes;
import edu.cmu.mism.dgjava.data.models.option.Currency;
import edu.cmu.mism.dgjava.data.models.option.Derivitives;
import edu.cmu.mism.dgjava.data.models.option.Equity;
import edu.cmu.mism.dgjava.data.models.option.EuropeanType;
import edu.cmu.mism.dgjava.data.models.option.Futures;
import edu.cmu.mism.dgjava.data.models.option.ImplicitFiniteDifference;
import edu.cmu.mism.dgjava.data.models.option.Index;
import edu.cmu.mism.dgjava.data.models.option.MonteCarloSimulation;
import edu.cmu.mism.dgjava.data.models.option.OptionCalculationResult;
import edu.cmu.mism.dgjava.data.models.option.OptionModelFactory;
import edu.cmu.mism.dgjava.data.models.option.OptionModelPackage;
import edu.cmu.mism.dgjava.data.models.option.PricingModel;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EGenericType;
import org.eclipse.emf.ecore.EPackage;

import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class OptionModelPackageImpl extends EPackageImpl implements OptionModelPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass derivitivesEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass equityEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass currencyEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass indexEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass futuresEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass pricingModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass europeanTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass americanTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass binomialEuropeanEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass binomialAmericanEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass optionCalculationResultEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass monteCarloSimulationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass implicitFiniteDifferenceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass blackScholesEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum baseTypeEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see edu.cmu.mism.dgjava.data.models.option.OptionModelPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private OptionModelPackageImpl() {
		super(eNS_URI, OptionModelFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link OptionModelPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static OptionModelPackage init() {
		if (isInited) return (OptionModelPackage)EPackage.Registry.INSTANCE.getEPackage(OptionModelPackage.eNS_URI);

		// Obtain or create and register package
		OptionModelPackageImpl theOptionModelPackage = (OptionModelPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof OptionModelPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new OptionModelPackageImpl());

		isInited = true;

		// Create package meta-data objects
		theOptionModelPackage.createPackageContents();

		// Initialize created meta-data
		theOptionModelPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theOptionModelPackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(OptionModelPackage.eNS_URI, theOptionModelPackage);
		return theOptionModelPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getDerivitives() {
		return derivitivesEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDerivitives_Volatility() {
		return (EAttribute)derivitivesEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getDerivitives_RiskFreeRate() {
		return (EAttribute)derivitivesEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEquity() {
		return equityEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEquity_StockPrice() {
		return (EAttribute)equityEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEquity_Dividends() {
		return (EAttribute)equityEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCurrency() {
		return currencyEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getCurrency_ExchangeRate() {
		return (EAttribute)currencyEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getCurrency_ForeignRiskRate() {
		return (EAttribute)currencyEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getIndex() {
		return indexEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getIndex_IndexLevel() {
		return (EAttribute)indexEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getIndex_DividendYield() {
		return (EAttribute)indexEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFutures() {
		return futuresEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getFutures_FuturesPrice() {
		return (EAttribute)futuresEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getPricingModel() {
		return pricingModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getPricingModel_Type() {
		return (EAttribute)pricingModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getPricingModel_ImplyVolatility() {
		return (EAttribute)pricingModelEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getPricingModel_ExercisePrice() {
		return (EAttribute)pricingModelEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEuropeanType() {
		return europeanTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEuropeanType_TimeToExercise() {
		return (EAttribute)europeanTypeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAmericanType() {
		return americanTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAmericanType_TimeToExpire() {
		return (EAttribute)americanTypeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getBinomialEuropean() {
		return binomialEuropeanEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBinomialEuropean_TreeSteps() {
		return (EAttribute)binomialEuropeanEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getBinomialAmerican() {
		return binomialAmericanEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getBinomialAmerican_TreeSteps() {
		return (EAttribute)binomialAmericanEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getOptionCalculationResult() {
		return optionCalculationResultEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getOptionCalculationResult_Price() {
		return (EAttribute)optionCalculationResultEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getOptionCalculationResult_Delta() {
		return (EAttribute)optionCalculationResultEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getOptionCalculationResult_Gamma() {
		return (EAttribute)optionCalculationResultEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getOptionCalculationResult_Vega() {
		return (EAttribute)optionCalculationResultEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getOptionCalculationResult_Theta() {
		return (EAttribute)optionCalculationResultEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getOptionCalculationResult_Rho() {
		return (EAttribute)optionCalculationResultEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMonteCarloSimulation() {
		return monteCarloSimulationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMonteCarloSimulation_SampleSize() {
		return (EAttribute)monteCarloSimulationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getImplicitFiniteDifference() {
		return implicitFiniteDifferenceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getImplicitFiniteDifference_MaxPrice() {
		return (EAttribute)implicitFiniteDifferenceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getImplicitFiniteDifference_TimeIntervals() {
		return (EAttribute)implicitFiniteDifferenceEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getImplicitFiniteDifference_PriceIntervals() {
		return (EAttribute)implicitFiniteDifferenceEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getBlackScholes() {
		return blackScholesEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getBaseType() {
		return baseTypeEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public OptionModelFactory getOptionModelFactory() {
		return (OptionModelFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		derivitivesEClass = createEClass(DERIVITIVES);
		createEAttribute(derivitivesEClass, DERIVITIVES__VOLATILITY);
		createEAttribute(derivitivesEClass, DERIVITIVES__RISK_FREE_RATE);

		equityEClass = createEClass(EQUITY);
		createEAttribute(equityEClass, EQUITY__STOCK_PRICE);
		createEAttribute(equityEClass, EQUITY__DIVIDENDS);

		currencyEClass = createEClass(CURRENCY);
		createEAttribute(currencyEClass, CURRENCY__EXCHANGE_RATE);
		createEAttribute(currencyEClass, CURRENCY__FOREIGN_RISK_RATE);

		indexEClass = createEClass(INDEX);
		createEAttribute(indexEClass, INDEX__INDEX_LEVEL);
		createEAttribute(indexEClass, INDEX__DIVIDEND_YIELD);

		futuresEClass = createEClass(FUTURES);
		createEAttribute(futuresEClass, FUTURES__FUTURES_PRICE);

		pricingModelEClass = createEClass(PRICING_MODEL);
		createEAttribute(pricingModelEClass, PRICING_MODEL__TYPE);
		createEAttribute(pricingModelEClass, PRICING_MODEL__IMPLY_VOLATILITY);
		createEAttribute(pricingModelEClass, PRICING_MODEL__EXERCISE_PRICE);

		europeanTypeEClass = createEClass(EUROPEAN_TYPE);
		createEAttribute(europeanTypeEClass, EUROPEAN_TYPE__TIME_TO_EXERCISE);

		americanTypeEClass = createEClass(AMERICAN_TYPE);
		createEAttribute(americanTypeEClass, AMERICAN_TYPE__TIME_TO_EXPIRE);

		binomialEuropeanEClass = createEClass(BINOMIAL_EUROPEAN);
		createEAttribute(binomialEuropeanEClass, BINOMIAL_EUROPEAN__TREE_STEPS);

		binomialAmericanEClass = createEClass(BINOMIAL_AMERICAN);
		createEAttribute(binomialAmericanEClass, BINOMIAL_AMERICAN__TREE_STEPS);

		optionCalculationResultEClass = createEClass(OPTION_CALCULATION_RESULT);
		createEAttribute(optionCalculationResultEClass, OPTION_CALCULATION_RESULT__PRICE);
		createEAttribute(optionCalculationResultEClass, OPTION_CALCULATION_RESULT__DELTA);
		createEAttribute(optionCalculationResultEClass, OPTION_CALCULATION_RESULT__GAMMA);
		createEAttribute(optionCalculationResultEClass, OPTION_CALCULATION_RESULT__VEGA);
		createEAttribute(optionCalculationResultEClass, OPTION_CALCULATION_RESULT__THETA);
		createEAttribute(optionCalculationResultEClass, OPTION_CALCULATION_RESULT__RHO);

		monteCarloSimulationEClass = createEClass(MONTE_CARLO_SIMULATION);
		createEAttribute(monteCarloSimulationEClass, MONTE_CARLO_SIMULATION__SAMPLE_SIZE);

		implicitFiniteDifferenceEClass = createEClass(IMPLICIT_FINITE_DIFFERENCE);
		createEAttribute(implicitFiniteDifferenceEClass, IMPLICIT_FINITE_DIFFERENCE__MAX_PRICE);
		createEAttribute(implicitFiniteDifferenceEClass, IMPLICIT_FINITE_DIFFERENCE__TIME_INTERVALS);
		createEAttribute(implicitFiniteDifferenceEClass, IMPLICIT_FINITE_DIFFERENCE__PRICE_INTERVALS);

		blackScholesEClass = createEClass(BLACK_SCHOLES);

		// Create enums
		baseTypeEEnum = createEEnum(BASE_TYPE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		equityEClass.getESuperTypes().add(this.getDerivitives());
		currencyEClass.getESuperTypes().add(this.getDerivitives());
		indexEClass.getESuperTypes().add(this.getDerivitives());
		futuresEClass.getESuperTypes().add(this.getDerivitives());
		europeanTypeEClass.getESuperTypes().add(this.getPricingModel());
		americanTypeEClass.getESuperTypes().add(this.getPricingModel());
		binomialEuropeanEClass.getESuperTypes().add(this.getEuropeanType());
		binomialAmericanEClass.getESuperTypes().add(this.getAmericanType());
		monteCarloSimulationEClass.getESuperTypes().add(this.getEuropeanType());
		implicitFiniteDifferenceEClass.getESuperTypes().add(this.getAmericanType());
		blackScholesEClass.getESuperTypes().add(this.getEuropeanType());

		// Initialize classes and features; add operations and parameters
		initEClass(derivitivesEClass, Derivitives.class, "Derivitives", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getDerivitives_Volatility(), ecorePackage.getEDouble(), "volatility", null, 0, 1, Derivitives.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getDerivitives_RiskFreeRate(), ecorePackage.getEDouble(), "riskFreeRate", null, 0, 1, Derivitives.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(equityEClass, Equity.class, "Equity", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEquity_StockPrice(), ecorePackage.getEDouble(), "stockPrice", null, 0, 1, Equity.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		EGenericType g1 = createEGenericType(ecorePackage.getEMap());
		EGenericType g2 = createEGenericType(ecorePackage.getEDoubleObject());
		g1.getETypeArguments().add(g2);
		g2 = createEGenericType(ecorePackage.getEDoubleObject());
		g1.getETypeArguments().add(g2);
		initEAttribute(getEquity_Dividends(), g1, "dividends", null, 0, 1, Equity.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(currencyEClass, Currency.class, "Currency", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getCurrency_ExchangeRate(), ecorePackage.getEDouble(), "exchangeRate", null, 0, 1, Currency.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getCurrency_ForeignRiskRate(), ecorePackage.getEDouble(), "foreignRiskRate", null, 0, 1, Currency.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(indexEClass, Index.class, "Index", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getIndex_IndexLevel(), ecorePackage.getEInt(), "indexLevel", null, 0, 1, Index.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getIndex_DividendYield(), ecorePackage.getEDouble(), "dividendYield", null, 0, 1, Index.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(futuresEClass, Futures.class, "Futures", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getFutures_FuturesPrice(), ecorePackage.getEDouble(), "futuresPrice", null, 0, 1, Futures.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(pricingModelEClass, PricingModel.class, "PricingModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getPricingModel_Type(), this.getBaseType(), "type", null, 0, 1, PricingModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getPricingModel_ImplyVolatility(), ecorePackage.getEBoolean(), "implyVolatility", null, 0, 1, PricingModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getPricingModel_ExercisePrice(), ecorePackage.getEDouble(), "exercisePrice", null, 0, 1, PricingModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(europeanTypeEClass, EuropeanType.class, "EuropeanType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEuropeanType_TimeToExercise(), ecorePackage.getEDouble(), "timeToExercise", null, 0, 1, EuropeanType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(americanTypeEClass, AmericanType.class, "AmericanType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAmericanType_TimeToExpire(), ecorePackage.getEDouble(), "timeToExpire", null, 0, 1, AmericanType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(binomialEuropeanEClass, BinomialEuropean.class, "BinomialEuropean", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getBinomialEuropean_TreeSteps(), ecorePackage.getEInt(), "treeSteps", null, 0, 1, BinomialEuropean.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(binomialAmericanEClass, BinomialAmerican.class, "BinomialAmerican", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getBinomialAmerican_TreeSteps(), ecorePackage.getEInt(), "treeSteps", null, 0, 1, BinomialAmerican.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(optionCalculationResultEClass, OptionCalculationResult.class, "OptionCalculationResult", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getOptionCalculationResult_Price(), ecorePackage.getEDouble(), "price", null, 0, 1, OptionCalculationResult.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getOptionCalculationResult_Delta(), ecorePackage.getEDouble(), "delta", null, 0, 1, OptionCalculationResult.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getOptionCalculationResult_Gamma(), ecorePackage.getEDouble(), "gamma", null, 0, 1, OptionCalculationResult.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getOptionCalculationResult_Vega(), ecorePackage.getEDouble(), "vega", null, 0, 1, OptionCalculationResult.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getOptionCalculationResult_Theta(), ecorePackage.getEDouble(), "theta", null, 0, 1, OptionCalculationResult.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getOptionCalculationResult_Rho(), ecorePackage.getEDouble(), "rho", null, 0, 1, OptionCalculationResult.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(monteCarloSimulationEClass, MonteCarloSimulation.class, "MonteCarloSimulation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getMonteCarloSimulation_SampleSize(), ecorePackage.getEInt(), "sampleSize", null, 0, 1, MonteCarloSimulation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(implicitFiniteDifferenceEClass, ImplicitFiniteDifference.class, "ImplicitFiniteDifference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getImplicitFiniteDifference_MaxPrice(), ecorePackage.getEDouble(), "maxPrice", null, 0, 1, ImplicitFiniteDifference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getImplicitFiniteDifference_TimeIntervals(), ecorePackage.getEInt(), "timeIntervals", null, 1, 1, ImplicitFiniteDifference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getImplicitFiniteDifference_PriceIntervals(), ecorePackage.getEInt(), "priceIntervals", null, 1, 1, ImplicitFiniteDifference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(blackScholesEClass, BlackScholes.class, "BlackScholes", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		// Initialize enums and add enum literals
		initEEnum(baseTypeEEnum, BaseType.class, "BaseType");
		addEEnumLiteral(baseTypeEEnum, BaseType.PUT);
		addEEnumLiteral(baseTypeEEnum, BaseType.CALL);

		// Create resource
		createResource(eNS_URI);
	}

} //OptionModelPackageImpl
